package com.lzy.pattern.singleton.demo8;

/**
 * @ClassName: Singleton
 * @Description: 单例设计模式：懒汉式，双重检查锁
 * @Author: LiuZy
 * @Date: 2022/4/10 16:05
 * @Version: 1.0
 */
public class Singleton {

    private static boolean flag = false;

    //1.私有化构造方法
    private Singleton(){
        //解决办法：当通过反射方式多次调用构造方法进行创建创建时，直接抛异常。不运行此中操作。
        if(flag){
            throw new RuntimeException("不能创建多个对象");
        }
        flag = true;
    }

    //2.声明静态成员变量
    private static volatile Singleton instance;

    //对外提供静态方法获取类对象
    public static Singleton getInstance(){
        if(instance == null){
            synchronized (Singleton.class) {
                if(instance == null){
                    instance = new Singleton();
                }
            }
        }

        return instance;
    }
}